package com.sz.biz.pay.account.service;

import com.sz.biz.pay.account.dto.AccountBalanceDto;
import com.sz.biz.pay.account.entity.Account;
import com.sz.biz.pay.account.entity.ThirdPayAccount;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;
import com.sz.common.base.dto.ResultDto;
import com.sz.common.pay.pingan.entity.b2b.query.MemberFundsAccountBalanceRequest;
import com.sz.common.pay.pingan.entity.b2b.query.MemberFundsAccountBalanceResponse;
import com.sz.common.pay.pingan.entity.b2b.query.TimePeriodMemberTransactionDetailsRequest;
import com.sz.common.pay.pingan.entity.b2b.query.TimePeriodOpenRemoveAccountDetailsRequest;

import java.util.List;

/**
 * Function: TODO: ADD FUNCTION <br>
 * Author: siqishangshu <br>
 * Date: 2017-11-08 14:14:00
 */
public interface ThirdPayAccountService {

    /**
     * 新增记录，返回id
     *
     * @param entry
     * @return id
     */
    int insert(ThirdPayAccount entry);

    /**
     * 通过id 删除
     *
     * @param id
     * @return
     */
    int delete(String id);

    /**
     * 多id 删除多条记录
     *
     * @param ids
     * @return
     */
    int delete(List ids);

    /**
     * id 更新记录
     *
     * @param entry
     * @return boolean
     */
    int update(ThirdPayAccount entry);

    /**
     * id 查找
     *
     * @param id
     * @return list
     */
    ThirdPayAccount select(String id);

    /**
     * 多id 查找
     *
     * @param ids
     * @return list
     */
    List<ThirdPayAccount> selectList(List ids);

    /**
     * 查询所有记录
     *
     * @return list
     */
    List<ThirdPayAccount> selectAll();

    /**
     * 搜索条件查找
     *
     * @param param
     * @return QResultDto
     */
    QResultDto selectList(QueryParams param);

    /**
     * 搜索条件查找结果统计
     *
     * @param param
     * @return int
     */
    int count(QueryParams param);

    /**
     * 全表数据统计
     *
     * @return int
     */
    int countAll();

    /**
     * 新增记录
     *
     * @param thirdPayAccount
     */
    void insertSelective(ThirdPayAccount thirdPayAccount);

    /**
     * 运营系统充值
     *
     * @param id                 第三方账户Id
     * @param totalBalance       总金额
     * @param TranscationType    交易类型
     * @param transcationBalance 交易金额
     * @param amountType         1.给冻结余额操作  2.可提现余额
     */
    void recharge(String id, double totalBalance, int TranscationType, double transcationBalance, int amountType);

    /**
     * 根据账户ID和第三方类型查询第三方账户
     *
     * @param accountId 账户ID
     * @param thirdType 第三方类型
     * @return
     */
    ThirdPayAccount findByAccountIdAndThirdType(String accountId, String thirdType);

    ThirdPayAccount getByAccountIdAndThirdType(String accountId, String thirdType);

    /**
     * 根据登录用户id获取第三方支付用户编码
     *
     * @param id
     * @return String
     */
    String findThirdPayId(String id);

    /**
     * 查询第三方账户的相关信息
     *
     * @param thirdType 第三方账户类型
     * @return
     */
    ResultDto findAccountInfo(String thirdType);

    /**
     * 查询账户余额信息
     *
     * @param thirdPayAccountId
     * @return
     */
    ResultDto findAccountBalance(String thirdPayAccountId);

    /**
     * 根据 根据第三方账户ID查找
     *
     * @param id 第三方账户ID
     * @return
     */
    ThirdPayAccount findById(String id);

    /**
     * 会员子账户开立请求
     *
     * @param accountId 账户ID
     * @return
     */
    ResultDto openAccountRequest(String accountId);

    /**
     * 开户
     *
     * @param accountId 账户ID
     * @return
     */
    ResultDto openAccount(String accountId);

    /**
     * 根据 根据第平安帐户ID查找
     *
     * @param id 平安帐户ID
     * @return
     */
    ThirdPayAccount findByCustAcctId(String custAcctId);

    /**
     * 根据系统登录用户查找账户ID
     * @return
     */
    String findAccountId();

    /**
     * 根据系统登录用户查找账户
     * @return
     */
    Account findAccount();

    /**
     * 根据系统登录用户查找第三方账户ID
     * @param thirdType
     * @return
     */
    String findThirdPayAccountId(String thirdType);

    /**
     * 根据系统登录用户查找第三方账户
     * @param thirdType
     * @return
     */
    ThirdPayAccount findThirdPayAccount(String thirdType);

    /**
     * 修改删除标记
     * @param thirdPayAccount
     */
    void changeDeleteSign(ThirdPayAccount thirdPayAccount);

    /**
     * 查询银行端会员子账户余额
     * @param thirdPayAccountId
     * @return
     */
    ResultDto getMemberBalance(String thirdPayAccountId);

    /**
     * 查时间段会员开销户信息
     * @param timePeriodOpenRemoveAccountDetailsRequest
     * @return
     */
    ResultDto findOpenRemoveAccountDetails(TimePeriodOpenRemoveAccountDetailsRequest timePeriodOpenRemoveAccountDetailsRequest);


    //TODO
    /**
     * 查询余额
     * @param thirdPayAccountId
     * @return
     */
    String getBalance(String thirdPayAccountId);

    //TODO

    /**
     * 展示运营系统账户基本信息
     * @param thirdType
     * @return
     */
    ResultDto findAccountBaseInfo(String thirdType);

    /**
     * 展示客户系统账户基本信息
     * @return
     */
    ResultDto findAccountBaseInfo();

}
